#!/usr/bin/env node

import { config } from '../config.js';
import { exec } from 'child_process';
import { promisify } from 'util';
import path from 'path';
import { fileURLToPath } from 'url';

const execAsync = promisify(exec);
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

async function initDatabase() {
    try {
        console.log('正在初始化数据库...');
        console.log(`数据库主机: ${config.database.host}:${config.database.port}`);
        console.log(`数据库名称: ${config.database.name}`);
        console.log(`用户名: ${config.database.user}`);
        
        // 构建MySQL命令
        const sqlFilePath = path.join(__dirname, '../database/init.sql');
        const mysqlCommand = `mysql -h ${config.database.host} -P ${config.database.port} -u ${config.database.user} ${config.database.password ? `-p${config.database.password}` : '-p'} ${config.database.name} < "${sqlFilePath}"`;
        
        console.log('执行SQL初始化脚本...');
        
        // 如果没有密码，需要交互式输入
        if (!config.database.password) {
            console.log('请输入数据库密码:');
            const { stdout, stderr } = await execAsync(mysqlCommand, { stdio: 'inherit' });
            if (stderr) {
                console.error('警告:', stderr);
            }
            if (stdout) {
                console.log(stdout);
            }
        } else {
            // 有密码的情况
            const { stdout, stderr } = await execAsync(mysqlCommand);
            if (stderr) {
                console.error('警告:', stderr);
            }
            if (stdout) {
                console.log(stdout);
            }
        }
        
        console.log('✅ 数据库初始化完成!');
        
    } catch (error) {
        console.error('❌ 数据库初始化失败:', error.message);
        
        // 提供帮助信息
        console.log('\n💡 解决建议:');
        console.log('1. 确保MySQL服务已启动');
        console.log('2. 确保数据库用户名和密码正确');
        console.log('3. 确保目标数据库已存在，如果不存在请先创建:');
        console.log(`   CREATE DATABASE ${config.database.name} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`);
        console.log('4. 检查网络连接和防火墙设置');
        
        process.exit(1);
    }
}

// 执行初始化
initDatabase();